# -*- coding:utf-8 -*-
from django.contrib.auth.models import User
from django.db import models

class Pais(models.Model):
    nombre = models.CharField(max_length=50, blank=False, null=False, unique=True)

    def __unicode__(self):
        return str(self.nombre)

class Estado(models.Model):
    nombre = models.CharField(max_length=50, blank=False, null=False)
    pais = models.ForeignKey('Pais', null=False, blank=False, related_name='estados')

    class Meta:
        unique_together = ('nombre', 'pais')

    def __unicode__(self):
        return '%s, %s' % (self.nombre, self.pais)

class Ciudad(models.Model):
    nombre = models.CharField(max_length=50, blank=False, null=False)
    estado = models.ForeignKey('Estado', blank=False, null=False, related_name='ciudades')

    class Meta:
        unique_together = ('nombre', 'estado')

    def __unicode__(self):
        return '%s, %s' % (self.nombre, self.estado)

class Barrio(models.Model):
    nombre = models.CharField(max_length=50, blank=False, null=False)
    ciudad = models.ForeignKey('Ciudad', blank=False, null=False, related_name='barrios')

    class Meta:
        unique_together = ('nombre', 'ciudad')

    def __unicode__(self):
        return '%s, %s' % (self.nombre, self.ciudad)


class Punto(models.Model):
    nombre = models.CharField(max_length=50, blank=False, null=False)
    barrio = models.ForeignKey('Barrio', blank=False, null=False, related_name='puntos')
    descripcion = models.CharField(max_length=200, blank=False, null=False)

    class Meta:
        unique_together = ('nombre', 'barrio')

    def __unicode__(self):
        return '%s, %s' % (self.nombre, self.barrio)


class Vehiculo(models.Model):
    descripcion = models.CharField(max_length=200, blank=False, null=False)
    plazas = models.IntegerField(default=5, null=False, blank=False)


class Viaje(models.Model):
    oferta = models.BooleanField(default=False)
    desde = models.ForeignKey('Punto', null=False, blank=False, related_name='viajes_desde')
    hasta = models.ForeignKey('Punto', null=False, blank=False, related_name='viajes_hasta')
    precio = models.DecimalField(max_digits=6, decimal_places=2, null=True, blank=True)
    frecuente = models.BooleanField(default=False)
    fecha_hora = models.DateTimeField(null=False, blank=False)
    fumador = models.BooleanField(default=False)
    flexibilidad = models.BooleanField(default=True)
    viajero = models.ForeignKey('Viajero', null=False, blank=False, related_name='viajes')
    completo = models.BooleanField(default=False)

    class Meta:
        unique_together = ('viajero', 'desde', 'hasta')

    def __unicode__(self):
        return '%s -> %s (%s)' % (self.desde.nombre, self.hasta.nombre, self.fecha_hora)


class Viajero(models.Model):
    usuario = models.OneToOneField(User, null=False, blank=False)
    documento = models.CharField(max_length=12, null=False, blank=False)
    telefono = models.CharField(max_length=20, null=False, blank=False)
    creditos_larga = models.IntegerField(default=1, null=False, blank=False)
    creditos_media = models.IntegerField(default=5, null=False, blank=False)
    vehiculo = models.OneToOneField('Vehiculo', null=True, blank=True)

    def __unicode__(self):
        return '%s' % self.usuario.email
